package com.cskaoyan.javase.oop2._2polymorphic._1basic;

/**
 * @description: 方法覆盖中的多态现象
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 首先父子类方法覆盖时,用父类引用指向子类对象,是存在多态现象的
 * 我们用一句话形容,对象名点成员方法的访问特征: "编译时看左边,运行时看右边"
 *
 *
 *   解释方法的多态性，一个很贴切的例子
 *
 *  - 我家中的一台电视机，贼贵，功能很丰富
 *  - 对于电视机而言，我们只能使用，遥控器去操作电视机
 *  - 这也就是说，只有遥控器上提供的功能我们才能使用
 *  - 即便电视机本身功能多么强大，如果遥控器上只有音量键，那我们也毫无办法
 *  - 遥控器有啥功能，决定了我们能使用的功能
 *  - 即使电视机本身功能再丰富，没有遥控器的支持，我们啥也用不了
 *
 *  > 把这个例子转换到Java程序中
 *
 *  - 电视机就相当于对象本身，而遥控器就是引用变量
 *  - 实际对象的功能再强大，如果引用中没有这个功能，那也无法调用该功能
 *  - 对象的行为，受限于引用变量，和对象本身没有直接关系
 *  - 对象的引用类型决定了可以访问对象的成员范围
 *  - 编译时看左边，运行时看右边
 *
 */
public class Demo2 {
    public static void main(String[] args) {
        Person p;
        p = new Student();
        p = new Teacher();

    }
}
class Person{
    public void sleep(){
        System.out.println("睡觉");
    }
}
class Student extends Person{
    @Override
    public void sleep() {
        System.out.println("躺着睡");
    }

    public void test(){}
}
class Teacher extends Person{
    @Override
    public void sleep() {
        System.out.println("趴着睡");
    }
}